#include "ZFImpl_sys_SDL_KeyCode.h"

#if ZF_ENV_sys_SDL

ZF_NAMESPACE_GLOBAL_BEGIN

ZFUIKeyCode ZFImpl_sys_SDL_ZFUIKeyCodeFromRaw(ZF_IN SDL_Keycode raw) {
    switch(raw) {
        case SDLK_UNKNOWN:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_RETURN:
            return v_ZFUIKeyCode::e_kEnter;
        case SDLK_ESCAPE:
            return v_ZFUIKeyCode::e_kEsc;
        case SDLK_BACKSPACE:
            return v_ZFUIKeyCode::e_kBackspace;
        case SDLK_TAB:
            return v_ZFUIKeyCode::e_kTab;
        case SDLK_SPACE:
            return v_ZFUIKeyCode::e_kSpace;
        case SDLK_EXCLAIM:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_DBLAPOSTROPHE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_HASH:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_DOLLAR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_PERCENT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AMPERSAND:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_APOSTROPHE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_LEFTPAREN:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_RIGHTPAREN:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_ASTERISK:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_PLUS:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_COMMA:
            return v_ZFUIKeyCode::e_kComma;
        case SDLK_MINUS:
            return v_ZFUIKeyCode::e_kMinus;
        case SDLK_PERIOD:
            return v_ZFUIKeyCode::e_kPeriod;
        case SDLK_SLASH:
            return v_ZFUIKeyCode::e_kSlash;
        case SDLK_0:
            return v_ZFUIKeyCode::e_k0;
        case SDLK_1:
            return v_ZFUIKeyCode::e_k1;
        case SDLK_2:
            return v_ZFUIKeyCode::e_k2;
        case SDLK_3:
            return v_ZFUIKeyCode::e_k3;
        case SDLK_4:
            return v_ZFUIKeyCode::e_k4;
        case SDLK_5:
            return v_ZFUIKeyCode::e_k5;
        case SDLK_6:
            return v_ZFUIKeyCode::e_k6;
        case SDLK_7:
            return v_ZFUIKeyCode::e_k7;
        case SDLK_8:
            return v_ZFUIKeyCode::e_k8;
        case SDLK_9:
            return v_ZFUIKeyCode::e_k9;
        case SDLK_COLON:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_SEMICOLON:
            return v_ZFUIKeyCode::e_kSemiColon;
        case SDLK_LESS:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_EQUALS:
            return v_ZFUIKeyCode::e_kEquals;
        case SDLK_GREATER:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_QUESTION:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AT:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_LEFTBRACKET:
            return v_ZFUIKeyCode::e_kBracketLeft;
        case SDLK_BACKSLASH:
            return v_ZFUIKeyCode::e_kBackSlash;
        case SDLK_RIGHTBRACKET:
            return v_ZFUIKeyCode::e_kBracketRight;
        case SDLK_CARET:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_UNDERSCORE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_GRAVE:
            return v_ZFUIKeyCode::e_kGrave;
        case SDLK_A:
            return v_ZFUIKeyCode::e_kA;
        case SDLK_B:
            return v_ZFUIKeyCode::e_kB;
        case SDLK_C:
            return v_ZFUIKeyCode::e_kC;
        case SDLK_D:
            return v_ZFUIKeyCode::e_kD;
        case SDLK_E:
            return v_ZFUIKeyCode::e_kE;
        case SDLK_F:
            return v_ZFUIKeyCode::e_kF;
        case SDLK_G:
            return v_ZFUIKeyCode::e_kG;
        case SDLK_H:
            return v_ZFUIKeyCode::e_kH;
        case SDLK_I:
            return v_ZFUIKeyCode::e_kI;
        case SDLK_J:
            return v_ZFUIKeyCode::e_kJ;
        case SDLK_K:
            return v_ZFUIKeyCode::e_kK;
        case SDLK_L:
            return v_ZFUIKeyCode::e_kL;
        case SDLK_M:
            return v_ZFUIKeyCode::e_kM;
        case SDLK_N:
            return v_ZFUIKeyCode::e_kN;
        case SDLK_O:
            return v_ZFUIKeyCode::e_kO;
        case SDLK_P:
            return v_ZFUIKeyCode::e_kP;
        case SDLK_Q:
            return v_ZFUIKeyCode::e_kQ;
        case SDLK_R:
            return v_ZFUIKeyCode::e_kR;
        case SDLK_S:
            return v_ZFUIKeyCode::e_kS;
        case SDLK_T:
            return v_ZFUIKeyCode::e_kT;
        case SDLK_U:
            return v_ZFUIKeyCode::e_kU;
        case SDLK_V:
            return v_ZFUIKeyCode::e_kV;
        case SDLK_W:
            return v_ZFUIKeyCode::e_kW;
        case SDLK_X:
            return v_ZFUIKeyCode::e_kX;
        case SDLK_Y:
            return v_ZFUIKeyCode::e_kY;
        case SDLK_Z:
            return v_ZFUIKeyCode::e_kZ;

        case SDLK_LEFTBRACE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_PIPE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_RIGHTBRACE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_TILDE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_DELETE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_PLUSMINUS:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CAPSLOCK:
            return v_ZFUIKeyCode::e_kCapsLock;

        case SDLK_F1:
            return v_ZFUIKeyCode::e_kF1;
        case SDLK_F2:
            return v_ZFUIKeyCode::e_kF2;
        case SDLK_F3:
            return v_ZFUIKeyCode::e_kF3;
        case SDLK_F4:
            return v_ZFUIKeyCode::e_kF4;
        case SDLK_F5:
            return v_ZFUIKeyCode::e_kF5;
        case SDLK_F6:
            return v_ZFUIKeyCode::e_kF6;
        case SDLK_F7:
            return v_ZFUIKeyCode::e_kF7;
        case SDLK_F8:
            return v_ZFUIKeyCode::e_kF8;
        case SDLK_F9:
            return v_ZFUIKeyCode::e_kF9;
        case SDLK_F10:
            return v_ZFUIKeyCode::e_kF10;
        case SDLK_F11:
            return v_ZFUIKeyCode::e_kF11;
        case SDLK_F12:
            return v_ZFUIKeyCode::e_kF12;

        case SDLK_PRINTSCREEN:
            return v_ZFUIKeyCode::e_kPrintScreen;
        case SDLK_SCROLLLOCK:
            return v_ZFUIKeyCode::e_kScrollLock;
        case SDLK_PAUSE:
            return v_ZFUIKeyCode::e_kPauseBreak;
        case SDLK_INSERT:
            return v_ZFUIKeyCode::e_kInsert;
        case SDLK_HOME:
            return v_ZFUIKeyCode::e_kHome;
        case SDLK_PAGEUP:
            return v_ZFUIKeyCode::e_kPageUp;
        case SDLK_END:
            return v_ZFUIKeyCode::e_kEnd;
        case SDLK_PAGEDOWN:
            return v_ZFUIKeyCode::e_kPageDown;
        case SDLK_RIGHT:
            return v_ZFUIKeyCode::e_kRight;
        case SDLK_LEFT:
            return v_ZFUIKeyCode::e_kLeft;
        case SDLK_DOWN:
            return v_ZFUIKeyCode::e_kDown;
        case SDLK_UP:
            return v_ZFUIKeyCode::e_kUp;

        case SDLK_NUMLOCKCLEAR:
            return v_ZFUIKeyCode::e_kNumLock;
        case SDLK_KP_DIVIDE:
            return v_ZFUIKeyCode::e_kNumDivide;
        case SDLK_KP_MULTIPLY:
            return v_ZFUIKeyCode::e_kNumMultiply;
        case SDLK_KP_MINUS:
            return v_ZFUIKeyCode::e_kNumMinus;
        case SDLK_KP_PLUS:
            return v_ZFUIKeyCode::e_kNumAdd;
        case SDLK_KP_ENTER:
            return v_ZFUIKeyCode::e_kNumEnter;
        case SDLK_KP_1:
            return v_ZFUIKeyCode::e_kNum1;
        case SDLK_KP_2:
            return v_ZFUIKeyCode::e_kNum2;
        case SDLK_KP_3:
            return v_ZFUIKeyCode::e_kNum3;
        case SDLK_KP_4:
            return v_ZFUIKeyCode::e_kNum4;
        case SDLK_KP_5:
            return v_ZFUIKeyCode::e_kNum5;
        case SDLK_KP_6:
            return v_ZFUIKeyCode::e_kNum6;
        case SDLK_KP_7:
            return v_ZFUIKeyCode::e_kNum7;
        case SDLK_KP_8:
            return v_ZFUIKeyCode::e_kNum8;
        case SDLK_KP_9:
            return v_ZFUIKeyCode::e_kNum9;
        case SDLK_KP_0:
            return v_ZFUIKeyCode::e_kNum0;
        case SDLK_KP_PERIOD:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_APPLICATION:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_POWER:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_EQUALS:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F13:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F14:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F15:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F16:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F17:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F18:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F19:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F20:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F21:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F22:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F23:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_F24:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_EXECUTE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_HELP:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_MENU:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_SELECT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_STOP:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AGAIN:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_UNDO:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CUT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_COPY:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_PASTE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_FIND:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_MUTE:
            return v_ZFUIKeyCode::e_kVolumeMute;
        case SDLK_VOLUMEUP:
            return v_ZFUIKeyCode::e_kVolumeUp;
        case SDLK_VOLUMEDOWN:
            return v_ZFUIKeyCode::e_kVolumeDown;
        case SDLK_KP_COMMA:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_EQUALSAS400:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_ALTERASE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_SYSREQ:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CANCEL:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CLEAR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_PRIOR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_RETURN2:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_SEPARATOR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_OUT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_OPER:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CLEARAGAIN:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CRSEL:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_EXSEL:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_KP_00:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_000:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_THOUSANDSSEPARATOR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_DECIMALSEPARATOR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CURRENCYUNIT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CURRENCYSUBUNIT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_LEFTPAREN:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_RIGHTPAREN:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_LEFTBRACE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_RIGHTBRACE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_TAB:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_BACKSPACE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_A:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_B:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_C:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_D:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_E:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_F:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_XOR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_POWER:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_PERCENT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_LESS:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_GREATER:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_AMPERSAND:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_DBLAMPERSAND:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_VERTICALBAR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_DBLVERTICALBAR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_COLON:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_HASH:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_SPACE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_AT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_EXCLAM:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_MEMSTORE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_MEMRECALL:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_MEMCLEAR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_MEMADD:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_MEMSUBTRACT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_MEMMULTIPLY:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_MEMDIVIDE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_PLUSMINUS:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_CLEAR:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_CLEARENTRY:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_BINARY:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_OCTAL:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_DECIMAL:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_KP_HEXADECIMAL:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_LCTRL:
            return v_ZFUIKeyCode::e_kCtrl;
        case SDLK_LSHIFT:
            return v_ZFUIKeyCode::e_kShift;
        case SDLK_LALT:
            return v_ZFUIKeyCode::e_kAlt;
        case SDLK_LGUI:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_RCTRL:
            return v_ZFUIKeyCode::e_kCtrl;
        case SDLK_RSHIFT:
            return v_ZFUIKeyCode::e_kShift;
        case SDLK_RALT:
            return v_ZFUIKeyCode::e_kAlt;
        case SDLK_RGUI:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_MODE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_SLEEP:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_WAKE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CHANNEL_INCREMENT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CHANNEL_DECREMENT:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_MEDIA_PLAY:
            return v_ZFUIKeyCode::e_kMediaPlay;
        case SDLK_MEDIA_PAUSE:
            return v_ZFUIKeyCode::e_kMediaPause;
        case SDLK_MEDIA_RECORD:
            return v_ZFUIKeyCode::e_kMediaRecord;
        case SDLK_MEDIA_FAST_FORWARD:
            return v_ZFUIKeyCode::e_kMediaFastForward;
        case SDLK_MEDIA_REWIND:
            return v_ZFUIKeyCode::e_kMediaFastRewind;
        case SDLK_MEDIA_NEXT_TRACK:
            return v_ZFUIKeyCode::e_kMediaNext;
        case SDLK_MEDIA_PREVIOUS_TRACK:
            return v_ZFUIKeyCode::e_kMediaPrev;
        case SDLK_MEDIA_STOP:
            return v_ZFUIKeyCode::e_kMediaStop;
        case SDLK_MEDIA_EJECT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_MEDIA_PLAY_PAUSE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_MEDIA_SELECT:
            return v_ZFUIKeyCode::e_kUnknown;

        case SDLK_AC_NEW:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_OPEN:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_CLOSE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_EXIT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_SAVE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_PRINT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_PROPERTIES:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_SEARCH:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_HOME:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_BACK:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_FORWARD:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_STOP:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_REFRESH:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_AC_BOOKMARKS:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_SOFTLEFT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_SOFTRIGHT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_CALL:
            return v_ZFUIKeyCode::e_kPhoneCall;
        case SDLK_ENDCALL:
            return v_ZFUIKeyCode::e_kPhoneCallEnd;
        case SDLK_LEFT_TAB:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_LEVEL5_SHIFT:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_MULTI_KEY_COMPOSE:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_LMETA:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_RMETA:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_LHYPER:
            return v_ZFUIKeyCode::e_kUnknown;
        case SDLK_RHYPER:
            return v_ZFUIKeyCode::e_kUnknown;

        default:
            return v_ZFUIKeyCode::e_kUnknown;
    }
}

ZF_NAMESPACE_GLOBAL_END

#endif // #if ZF_ENV_sys_SDL

